package yt.demo.appcommondb.tools;

import org.modelmapper.ModelMapper;
import yt.demo.appcommondb.vo.PageVO;

import java.util.List;
import java.util.stream.Collectors;

public class PageConverter {


    private static final ModelMapper modelMapper = new ModelMapper();

    /**
     * 通用的 PageVO 转换方法
     *
     * @param pageData 原始分页数据
     * @param targetClass 目标 DTO 类
     * @param <T> 源数据类型
     * @param <D> 目标数据类型
     * @return 转换后的 PageVO
     */
    public static <T, D> PageVO<D> convertPage(PageVO<T> pageData, Class<D> targetClass) {
        if (pageData == null) {
            return null;
        }

        // 创建目标 PageVO<D>
        PageVO<D> pageVO = new PageVO<>();

        // 复制分页信息
        pageVO.setSize(pageData.getSize());
        pageVO.setTotal(pageData.getTotal());
        pageVO.setOrders(pageData.getOrders());
        pageVO.setCurrent(pageData.getCurrent());
        pageVO.setPages(pageVO.getPages());
        // 使用 ModelMapper 转换 records
        List<D> records = pageData.getList().stream()
                .map(item -> modelMapper.map(item, targetClass))
                .collect(Collectors.toList());
        // 设置转换后的 records
        pageVO.setList(records);
        return pageVO;
    }
}
